/**
 * 创建时间： 2017年5月2日
 *
 * @Copyright 武汉雷软科技有限公司
 */

package com.lrkj.framework.exception;

import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;

import com.lrkj.framework.constant.Const;
import com.lrkj.framework.mvc.result.Result;

import lombok.extern.slf4j.Slf4j;

/**
 * <pre>
 * 创建人： 郭亮
 * 类描述：
 * 版本号：0.0.1
 * 修改人：
 * 修改时间：
 * 修改内容：
 * </pre>
 */
@Aspect
@Slf4j
public class MessageExceptionAspect {

    /**
     * 切入点
     */
    @Pointcut("within(@org.springframework.stereotype.Controller *) || within(@org.springframework.web.bind.annotation.RestController *)")
    public void aspect() {
    }

    /**
     * service异常统一处理切面
     *
     * @param pjp
     *            方法切入点
     * @return 调用结果
     * @throws Throwable
     *             异常
     */
    @Around("aspect()")
    public Object invoke(ProceedingJoinPoint pjp) throws Throwable {
        try {
            return pjp.proceed();
        } catch (MessageException e) {
            return new Result(e.getCode(), false, e.getMessage());
        } catch (Exception e) {
            log.debug("服务器异常", e);
            return new Result(Const.MvcStatus.FAIL, false, "服务器异常");
        }
    }
}
